/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sni.org.pe.session;

import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import sni.org.pe.model.Usuario;
import sni.org.pe.session.remote.UsuarioSessionEJBRemote;

/**
 *
 * @author ehuamani
 */
@Stateless
public class UsuarioSessionEJB implements UsuarioSessionEJBRemote {

    @PersistenceContext(unitName = "persistenciaPU")
    private EntityManager em;

    protected EntityManager getEntityManager() {
        return em;
    }

    public UsuarioSessionEJB() {
    }

    @Override
    public List<Usuario> findAll() {
        return em.createNamedQuery("Usuario.findAll").getResultList();
    }
    
    public Usuario persistUsuario(Usuario usuario){
        em.persist(usuario);
        return usuario;
    }

    @Override
    @SuppressWarnings("CallToThreadDumpStack")
    public Usuario getUsuario(String usuario, String password) {
        Usuario u=null;
        try {
            Query q = em.createQuery("select u from Usuario u where u.usuarioUsuario=:usuario and u.claveUsuario=:clave");
            q.setParameter("usuario", usuario);
            q.setParameter("clave", password);
            u = (Usuario) q.getSingleResult();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return u;
    }

    @Override
    public List<Usuario> getUsuarios(String usuarioUsuario, String nombreUsuario, int idperfil, int estado){
        List<Usuario> usuarioList=null;
        try{
            String consulta="select u from Usuario u where 1=1 ";
            if(nombreUsuario!=null && nombreUsuario.length()>0){
                consulta+=" and concat(u.nombreUsuario, ' ',u.apellidosUsuario) like :nombreUsuario ";
            }
            if(usuarioUsuario!=null && usuarioUsuario.length()>0){
                consulta+=" and u.usuarioUsuario like :usuarioUsuario ";
            }
            if(idperfil!=-1){
                consulta+=" and u.idperfil.idperfil = :idperfil ";
            }
            if(estado!=-1){
                consulta+=" and u.estadoUsuario = :estado ";
            }
            consulta+=" order by u.nombreUsuario";
            
            Query q = em.createQuery(consulta);
            if(nombreUsuario!=null && nombreUsuario.length()>0){
                q.setParameter("nombreUsuario", "%"+nombreUsuario+"%");
            }
            if(usuarioUsuario!=null && usuarioUsuario.length()>0){
                q.setParameter("usuarioUsuario", "%"+usuarioUsuario+"%");
            }
            if(idperfil!=-1){
                q.setParameter("idperfil", idperfil);
            }
            if(estado!=-1){
                q.setParameter("estado", estado);
            }
            usuarioList = (List<Usuario>)q.getResultList();
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }
        return usuarioList;
    }
}
